"""（1）定义相关类属性，构造函数默认以当前时间为日期默认时间。
（2）写方法设置日期信息。
（3）写方法：将一个日期格式的字符串（“2019-05-09”)转换成日期类对象。      
（4）将年月日设置为私有，并为年月日定义可读写属性，并控制年月日的输入范围。
（5）定义两个日期的减法运算，返回两个日期之间天数的差值。
（6）定义日期加(年，月，或者日的方法）：def add(self,year=0,month=0,day=0)
（7）日期输出，显示格式为（2019-01-01）。使用特殊函数__str__()
测试场景使用设计，可参考：学生的借书日期为3个月，超过了日期罚款，每天罚款0.1元。设计实现：
1）输入学生的借书日期。       
（2）续借（重新修改学生的借书日期）
（3）还书（输入当前的日期）两种情况
   1）为未过日期，则正常还书
    2）超过日期，按天数计算收费（假设超期1天0.1元）。输出罚款金额"""
from datetime import date,datetime#导入时间
class cDate:
    def __init__(self,strDate=None):#strDate 格式为2020-2-2
        sList=[]
        slist=strDate.split("-")
        self.__year=int(slist[0])
        self.__month=int(slist[1])
        self.__day=int(slist[2])
    def setDate(self,strDate):   #修改对象日期
        sList=[]
        slist=strDate.split("-")
        self.__year=int(slist[0])
        self.__month=int(slist[1])
        self.__day=int(slist[2])
        #年属性
    def __getyear(self):
        return self.__year
    def __setyear(self,value):
        self.__year=value
    year=property(__getyear,__setyear)
    #月属性
    def __getmonth(self):
        return self.__month
    def __setmonth(self,value):
        self.__month=value
    month=property(__getmonth,__setmonth)
    #日属性
    def __getday(self):
        return self.__day
    def __setday(self,value):
        self.__month=value
    day=property(__getday,__setday)
    def __sub__(self,date2):
        d1=datetime(self.__year,self.__month,self.__day)
        d2=datetime(date2.__year,date2.__month,date2.__day)
        return (d1-d2).days
    def __add__(self,x):
        return (self.__year+x)
    def add(self,year=0,month=0,day=0):
        self.__year=self.__year+year
    def __str__(self):
        return f"{self.__year}-{self.__month}-{self.__day}"

print("软工软工2020-01-05郭枫")

if __name__=="__main__":
    bDate=cDate(input("请输入借书日期："))
    rDate=cDate(input("请输入还书日期："))
    d1=rDate-bDate
    print(d1)
"""s=str(d1)
d1=cDate(2001,12,12)
d2=cDate(2001,11,12)
print(d1)"""
"""    def setyear(self,y):
        if(y>=1):
            self.__year=y
        else:
            print("输入错误！")
    def setmonth(self,m):
        if(m>=1 and m<=12):
            self.__month=m
        else:
            print("输入错误！")
    def setday(self,d):
        #if(m)根据年月改时间
        if(d>=1 and d<=31):
            self.__day=d
        else:
            print("输入错误！")
    def getmonth(self):
        return self.__month
    month=property(getmonth,setmonth)"""
"""   def __str__(self):
        y=2021
        m=5
        d=29
        return f"{self.__year}-{self.__month}-{self.__day}"
    def __eq__(self,d):
        if(self.__year==self.__year):
            return True
        else:
            return False"""

"""        if(self.__year==other.__year):
            if(self.__month==other.__month):
                if(self.__day==other.__day):
                    print("日期相等！")
                else:
                    self.__day=self.__day-other.__day  
            else:"""
"""def isLeapYear(year):
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        return True
    else:
        return False"""


# year1为起始日期，year2为终止日期
# 判断year1是否为闰年，选择year1当年每月的天数列表
"""def dayBetweenDates(year1, month1, day1, year2, month2, day2):
    if isLeapYear(year1):
        print(str(year1)+':闰年')
        dayofmonth1 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]   # 列表下标从0开始的 所以后面计算月份天数的时候，传入的月份应该-1
    else:
        print(str(year1) + ':非闰年')
        dayofmonth1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    year_temp = year2 - year1
    month_temp = month2 - month1

    if year_temp == 0:
        if month_temp == 0:
            days = day2 - day1
        else:
            # days = dayofmonth1[month1 - 1] - day1 + day2  # '掐头去尾'
            i = 1
            sum = 0
            #假设计算3月5号到6月4号的天数，先计算3，4，5月的总天数,所以是 [month1 + i - 1-1]，然后减去5，加上4
            while i < month_temp + 1:
                day = dayofmonth1[month1 + i - 1-1]
                sum += day
                i+=1
            days = sum - day1 + day2
    else:
        if isLeapYear(year2):
            dayofmonth2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
            year_days = 366
        else:
            dayofmonth2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
            year_days = 365
        i = 1
        sum1 = 0
        sum2 = 0
        middle_year_sum_days=0

        # 获取小年份剩余的天数
        while i < month1:
            day = dayofmonth1[month1 - i-1]
            sum1 += day
            i += 1
        other_days1 = year_days - sum1 - day1

        # 获取大年份经过的天数
        i=1
        while i < month2:
            day = dayofmonth2[month2 - i-1]
            sum2 += day
            i += 1
        other_days2 = sum2 + day2

        # 获取中间年份的天数
        i=1
        while i < year_temp:
            middle_year = year1+i
            if isLeapYear(middle_year):
                year_day=366
            else:
                year_day=365
            middle_year_sum_days+=year_day
            i+=1
        days=middle_year_sum_days+other_days1+other_days2

    return days

# 2014 1.25   2018.3.26
days=dayBetweenDates(2014,1,25,2018,3,26)
print(days)                """
"""    def isLeapYear(self,y):
        if (self.__year % 4 == 0 and self.__year % 100 != 0) or (self.__year % 400 == 0):
            return True
        else:
            return False
    def dayBetweenDates(self,y, m, d):
        if isLeapYear(self,y):
            print(str(y)+':闰年')
            dayofmonth1 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]   # 列表下标从0开始的 所以后面计算月份天数的时候，传入的月份应该-1
        else:
            print(str(y) + ':非闰年')
            dayofmonth1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

        year_temp = y - y
        month_temp = month2 - month1

        if year_temp == 0:
            if month_temp == 0:
                days = day2 - day1
            else:
                # days = dayofmonth1[month1 - 1] - day1 + day2  # '掐头去尾'
                i = 1
                sum = 0
                #假设计算3月5号到6月4号的天数，先计算3，4，5月的总天数,所以是 [month1 + i - 1-1]，然后减去5，加上4
                while i < month_temp + 1:
                    day = dayofmonth1[month1 + i - 1-1]
                    sum += day
                    i+=1
                days = sum - day1 + day2
        else:
            if isLeapYear(year2):
                dayofmonth2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
                year_days = 366
            else:
                dayofmonth2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
                year_days = 365
            i = 1
            sum1 = 0
            sum2 = 0
            middle_year_sum_days=0

            # 获取小年份剩余的天数
            while i < month1:
                day = dayofmonth1[month1 - i-1]
                sum1 += day
                i += 1
            other_days1 = year_days - sum1 - day1

            # 获取大年份经过的天数
            i=1
            while i < month2:
                day = dayofmonth2[month2 - i-1]
                sum2 += day
                i += 1
            other_days2 = sum2 + day2

            # 获取中间年份的天数
            i=1
            while i < year_temp:
                middle_year = year1+i
                if isLeapYear(middle_year):
                    year_day=366
                else:
                    year_day=365
                middle_year_sum_days+=year_day
                i+=1
            days=middle_year_sum_days+other_days1+other_days2
"""
"""    def __str__(self):
        self.__Year=(input("请输入借书年份："))
        self.__Month=(input("请输入借书月份："))
        self.__Day=(input("请输入借书日："))
        change = input("是否要更改日期,请回答Y或者N: ").upper()
        if change == "Y":
            self.__Year=(input("请输入借书年份："))
            self.__Month=(input("请输入借书月份："))
            self.__Day=(input("请输入借书日："))
        self.__Year=(input("请输入还书年份："))
        self.__Month=(input("请输入还书月份："))
        self.__Day=(input("请输入还书日："))
        if()  """